package com.cskaoyan.abstracts;

/*
        一个类如果没有抽象方法，可不可以定义为抽象类?如果可以，有什么意义?
        可以，如果我们不希望别人直接创建该对象使用，可以这么做

        abstract不能和哪些关键字共存? private static final
       对于为什么冲突的理解：
      1. abstract 定义抽象方法，对于抽象方法而言，
         如果在代码中要使用，其实永远是通过多态，调用的是子类中，覆盖实现的抽象父类的具体方法

      2. 而被，private，final，static关键字修饰的方法，都不能在子类中被覆盖，
        于是意味着这些方法，无法在程序中运行
 */
public class Demo5Note {

    public static void main(String[] args) {
        //ToolClass toolClass = new ToolClass();
        //toolClass.method();

        ToolClass toolClass = new ToolSon();
        toolClass.method();
    }

}

abstract class KeyClass {

    // 关键字的冲突
    // static 和 abstract不能共存
    //public static abstract void staticMethod();

    // private 和 abstract不能共存
    //private abstract void privateMethod();

    // final 和 abstract不能共存
    //public final abstract void finalMethod();
}

class KeySonClass extends KeyClass {
    // static 的方法子类不能覆盖

    // 被private修饰的方法，子类不能覆盖

    // final修饰的方法，子类不能覆盖

}


abstract class ToolClass {


    /*
         非常复杂的方法，该方法只考虑到了某些场景
     */
    public void method() {

    }
}

class ToolSon extends ToolClass {

}